package RRHH_Modelo;

import Conexion.Conexion;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import java.util.Date;

public class RHH_BAJA_MEDICA {

    private int ID;
    private int ID_USUARIO;
    private Date FECHA_INI;
    private Date FECHA_FIN;
    private String DESCRIPCION;
    private int ESTADO;
    private String DOCUMENTO;
    private Conexion con = null;

    public RHH_BAJA_MEDICA(Conexion con) {
        this.con = con;
    }

    public RHH_BAJA_MEDICA(int ID, int ID_USUARIO, Date FECHA_INI, Date FECHA_FIN, String DESCRIPCION, int ESTADO, String DOCUMENTO) {
        this.ID = ID;
        this.ID_USUARIO = ID_USUARIO;
        this.FECHA_INI = FECHA_INI;
        this.FECHA_FIN = FECHA_FIN;
        this.DESCRIPCION = DESCRIPCION;
        this.ESTADO = ESTADO;
        this.DOCUMENTO = DOCUMENTO;
    }

    public int Insertar() throws SQLException {
        String consulta = "insert into BROKER.RHH_BAJA_MEDICA (ID, ID_USUARIO, FECHA_INI, FECHA_FIN, DESCRIPCION, ESTADO, DOCUMENTO) VALUES (" + ID + "," + ID_USUARIO + ",to_date('" + getFECHA_INI() + "','dd/MM/yyyy HH24:mi'),to_date('" + getFECHA_FIN() + "','dd/MM/yyyy HH24:mi'),'" + DESCRIPCION + "'," + ESTADO + ",'" + DOCUMENTO + "')";
        con.EjecutarSentencia(consulta);
        consulta = "select BROKER.RHH_BAJA_MEDICA_SEQ.currval as ID from dual";
        ResultSet rs = con.EjecutarConsulta(consulta);
        rs.next();
        return rs.getInt("ID");
    }
    
    public boolean Aprobar(int id) throws SQLException {
        String consulta = "update BROKER.RHH_BAJA_MEDICA set ESTADO =0 where ID= " + id;
        con.EjecutarSentencia(consulta);
        return true;
    }

    public boolean EliminarXid() throws SQLException {
        String consulta = "delete from BROKER.RHH_BAJA_MEDICA where ID= " + getID();
        con.EjecutarSentencia(consulta);
        return true;
    }
    public boolean EliminarXid(int id) throws SQLException {
        String consulta = "delete from BROKER.RHH_BAJA_MEDICA where ID= " + id;
        con.EjecutarSentencia(consulta);
        return true;
    }

    public List<RHH_BAJA_MEDICA> Todos() throws SQLException {
        rechazarViejos();
        String consulta = "  SELECT RHH_BAJA_MEDICA.*\n" +
                            "FROM BROKER.RHH_BAJA_MEDICA\n" +
                            "WHERE (RHH_BAJA_MEDICA.ESTADO = 1)\n" +
                            "ORDER BY RHH_BAJA_MEDICA.FECHA_INI ASC, RHH_BAJA_MEDICA.ID_USUARIO ASC";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_BAJA_MEDICA> lista = Cargar(rs);
        return lista;
    }
    
    public List<RHH_BAJA_MEDICA> TodosAprobados() throws SQLException {
        rechazarViejos();
        String consulta = "  SELECT RHH_BAJA_MEDICA.*\n" +
                            "FROM BROKER.RHH_BAJA_MEDICA\n" +
                            "WHERE (RHH_BAJA_MEDICA.ESTADO = 0)\n" +
                            "ORDER BY RHH_BAJA_MEDICA.FECHA_INI ASC, RHH_BAJA_MEDICA.ID_USUARIO ASC";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_BAJA_MEDICA> lista = Cargar(rs);
        return lista;
    }
    
    private void rechazarViejos() throws SQLException
    {
        String consulta = "delete BROKER.RHH_BAJA_MEDICA  where ESTADO = 1 and FECHA_INI<SYSDATE";
        con.EjecutarSentencia(consulta);
    }
    
    public RHH_BAJA_MEDICA Buscar(int id) throws SQLException {
        String consulta = "select * from BROKER.RHH_BAJA_MEDICA where id="+id;
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs).get(0);    
    }
    public List<RHH_BAJA_MEDICA> buscarxUsuario(String usuario,int estado) throws SQLException {
        String consulta = "SELECT RHH_BAJA_MEDICA.*\n" +
                          "FROM BROKER.RHH_BAJA_MEDICA, BROKER.RHH_USUARIO\n" +
                          "WHERE (RHH_BAJA_MEDICA.ID_USUARIO = RHH_USUARIO.ID)\n" +
                          "AND (RHH_BAJA_MEDICA.ESTADO = "+estado+")\n" +
                          "AND UPPER(RHH_USUARIO.USUARIO) like(UPPER('"+usuario+"%'))";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_BAJA_MEDICA> lista = Cargar(rs);
        return lista;
    }
    public List<RHH_BAJA_MEDICA> buscarxfecha(String fechaIni,String fechaFin,int estado) throws SQLException {
        String consulta = "SELECT RHH_BAJA_MEDICA.*\n" +
                          "FROM BROKER.RHH_BAJA_MEDICA\n" +
                          "WHERE (RHH_BAJA_MEDICA.ESTADO = "+estado+")\n" +
                          "AND (RHH_BAJA_MEDICA.FECHA_INI BETWEEN TO_DATE('"+fechaIni+"','DD/MM/YYYY') AND TO_DATE ('"+fechaFin+"','DD/MM/YYYY'))";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_BAJA_MEDICA> lista = Cargar(rs);
        return lista;
    }
    
    public List<RHH_BAJA_MEDICA> TodosxDia(int id_usr, String fecha) throws SQLException {
        rechazarViejos();
        String consulta = "SELECT RHH_BAJA_MEDICA.*\n" +
                        "FROM BROKER.RHH_BAJA_MEDICA\n" +
                        "WHERE (RHH_BAJA_MEDICA.ID_USUARIO = "+id_usr+")\n" +
                        "AND (to_date(RHH_BAJA_MEDICA.FECHA_INI,'DD/MM/YYYY') LIKE TO_DATE ('"+fecha+"', 'DD/MM/YYYY'))";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_BAJA_MEDICA> lista = Cargar(rs);
        return lista;
    }
    public List<RHH_BAJA_MEDICA> TodosxMes(int id_usr, String fecha) throws SQLException {
        rechazarViejos();
        String consulta = "SELECT RHH_BAJA_MEDICA.*\n" +
                        "FROM BROKER.RHH_BAJA_MEDICA\n" +
                        "WHERE (RHH_BAJA_MEDICA.ID_USUARIO = "+id_usr+")\n" +
                        "AND TO_DATE(to_CHAR(RHH_BAJA_MEDICA.FECHA_INI,'MM/YYYY'),'MM/YYYY') LIKE TO_DATE('"+fecha+"', 'MM/YYYY')"
                        +"AND ESTADO=0";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_BAJA_MEDICA> lista = Cargar(rs);
        return lista;
    }
    public List<RHH_BAJA_MEDICA> Cargar(ResultSet rs) throws SQLException {
        List<RHH_BAJA_MEDICA> lista = new ArrayList<RHH_BAJA_MEDICA>();
        while (rs.next()) {
            RHH_BAJA_MEDICA objeto = new RHH_BAJA_MEDICA(con);
            objeto.setID(rs.getInt("ID"));
            objeto.setID_USUARIO(rs.getInt("ID_USUARIO"));
            objeto.setFECHA_INI(rs.getDate("FECHA_INI"));
            objeto.setFECHA_FIN(rs.getDate("FECHA_FIN"));
            objeto.setDESCRIPCION(rs.getString("DESCRIPCION"));
            objeto.setESTADO(rs.getInt("ESTADO"));
            objeto.setDOCUMENTO(rs.getString("DOCUMENTO"));
            lista.add(objeto);
        }
        return lista;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public int getID_USUARIO() {
        return ID_USUARIO;
    }

    public void setID_USUARIO(int ID_USUARIO) {
        this.ID_USUARIO = ID_USUARIO;
    }

    public String getFECHA_INI() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy kk:mm");
        return sdf.format(FECHA_INI);
    }
    public Date getFECHA_INIinDate() {        
        return FECHA_INI;
    }

    public void setFECHA_INI(Date FECHA_INI) {
        this.FECHA_INI = FECHA_INI;
    }

     public String getFECHA_INISinHora() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MMMM/yyyy kk:mm");
        return sdf.format(FECHA_INI);
    }
    
    public String getFECHA_FIN() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy kk:mm");
        return sdf.format(FECHA_FIN);
    }

    public void setFECHA_FIN(Date FECHA_FIN) {
        this.FECHA_FIN = FECHA_FIN;
    }

    public String getDESCRIPCION() {
        return DESCRIPCION;
    }

    public void setDESCRIPCION(String DESCRIPCION) {
        this.DESCRIPCION = DESCRIPCION;
    }

    public int getESTADO() {
        return ESTADO;
    }

    public void setESTADO(int ESTADO) {
        this.ESTADO = ESTADO;
    }

    public String getDOCUMENTO() {
        return DOCUMENTO;
    }

    public void setDOCUMENTO(String DOCUMENTO) {
        this.DOCUMENTO = DOCUMENTO;
    }

    public Conexion getCon() {
        return this.con;
    }

    public void setCon(Conexion con) {
        this.con = con;
    }
    
     public String getHORA_INICIOSF() {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
        return sdf.format(FECHA_INI);
    }
     
    public String getHORA_FINSF() {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
        return sdf.format(FECHA_FIN);
    }
}
